package com.dys.testinterface;

/**
 * @className: com.dys.testinterface.IPersonInterface
 * @description: 类是类, 接口是接口，他们是同一层次的概念
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/07/21 下午9:46
 */
public interface IPersonInterface {
    // 接口中没有构造器
    // 接口如何声明？interface
    // 在JDK1.8之前：接口中只有2部分内容: 1.常量：public static final 2.抽象方法 public abstract
    // 修饰符可以省略不写,推荐加上
    // 1.常量
    public final static int NUM = 10;

    // 2.抽象方法
    public abstract void a();

    public abstract void b();

    public abstract void c();
}

interface IPersonInterface2 {
    public abstract void d();

    public abstract void e();
}

/*
 * 类和接口是什么关系？实现关系，类实现接口
 * 一旦实现一个接口，那么实现类要重写接口中全部的抽象方法
 * 如果没有重写全部抽象方法，那么这个类可以变成一个抽象类
 * java中不仅有单继承，还有多实现
 * 一个类继承其它类，只能继承一个父类
 * 但是实现类实现接口的话，可以实现多个接口
 * 写法：先继承，再实现 extends BasePerson implements IPersonInterface
 * */
abstract class Student2 implements IPersonInterface {

}

class Student implements IPersonInterface {

    @Override
    public void a() {
        System.out.println("接口的实现方法1....");
    }

    @Override
    public void b() {
        System.out.println("接口的实现方法2....");
    }

    @Override
    public void c() {
        System.out.println("接口的实现方法3....");
    }
}

class Test {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        // 接口不能创建对象
        // IPersonInterface iPersonInterface = new IPersonInterface();
        IPersonInterface iPersonInterface = new Student();// 接口指向实现类-->多态

        // 接口中常量如何访问？
        System.out.println(IPersonInterface.NUM);
        System.out.println(Student.NUM);
        Student s = new Student();
        System.out.println(s.NUM);
        IPersonInterface s2 = new Student();
        System.out.println(s2.NUM);
    }
}